package com.angel.architecture.flex.annotations.reader;

import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.Collection;

/**
 * esta clase sirve para evaluar muchos predicados juntos
 * si al menos uno falla la evaluacion es false
 * si todos dan true la evaluacion es true
 *
 * @author Sebastian D. Rosenbolt
 *         Date: 26/09/2008
 */
public class AnnotationAndPredicate <T extends Annotation> implements AnnotationPredicate<T>{
    private Collection<AnnotationPredicate<T>> predicados = new ArrayList<AnnotationPredicate<T>>();

    public boolean evaluate(T annotation) {
        for (AnnotationPredicate<T> predicado : predicados) {
            if(!predicado.evaluate(annotation)){
                return false;
            }
        }
        return true;
    }

    public boolean addPredicate(AnnotationPredicate<T> o) {
        return predicados.add(o);
    }

    public boolean removePredicate(Object o) {
        return predicados.remove(o);
    }

    public Collection<AnnotationPredicate<T>> getPredicados() {
        return predicados;
    }

    public void setPredicados(Collection<AnnotationPredicate<T>> predicados) {
        this.predicados = predicados;
    }
}
